package com.cskaoyan.javase.homework.day13.stage2.controller.impl;


import com.cskaoyan.javase.homework.day13.stage2.controller.StudentController;
import com.cskaoyan.javase.homework.day13.stage2.dao.StudentDao;
import com.cskaoyan.javase.homework.day13.stage2.dao.impl.StudentDaoImpl;
import com.cskaoyan.javase.homework.day13.stage2.model.Student;

/**
 * 与学生信息相关的,业务操作的具体实现
 * @since 19:30
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class StudentControllerImpl implements StudentController {

    // 业务处理需要获取数据,所以需要依赖数据处理层
    private StudentDao studentDao = new StudentDaoImpl();

    /**
     * Swing GUI表格需要的表格数据data是一个String类型的二维数组,
     *      所以需要封装出二维数组
     * @since 9:19
     * @return java.lang.String[][] 作为GUI表格的数据data
     * @author wuguidong@cskaoyan.onaliyun.com
     */
    @Override
    public String[][] getAllTableData() {
        // 思考,这个二维数组怎么获取?
        /*
            二维数组装的是学生信息
            但是这是一个String类型的二维数组
            这个二维数组中的每一个一维数组都表示一条学生信息
            把所有学生信息组装起来就是我们想要的二维数组
         */
        // 为了逻辑通畅,建议写完一个逻辑,再回过头去实现另一个逻辑
        Student[] studs = studentDao.getAllRealStudent();
        // 有了这个学生数组后,怎么封装成二维数组呢?
        String[][] result = new String[studs.length][];
        // 接下来为每个一维数组进行初始化
        for (int i = 0; i < result.length; i++) {
            result[i] = new String[]{studs[i].getStuId(), studs[i].getName(), studs[i].getGender(), studs[i].getSchool(), studs[i].getMajor(), studs[i].getAge(), studs[i].getCity(), studs[i].getPhone(), studs[i].getEmail()};
        }
        return result;
    }

    /**
     *  Swing GUI表格需要的表格列是一个String数组
     * @since 9:20
     * @return java.lang.String[]
     * @author wuguidong@cskaoyan.onaliyun.com
     */
    @Override
    public String[] getTableColumns() {
        // 这个方法比较简单，实现我给你提供了。你可以参考我这个实现，完成该类中其它抽象方法的实现。
        return studentDao.getTableColumns();
    }

    /**
     * 检查id是否重复,true表示重复,否则为不重复
     * @since 18:11
     * @param id 学生id
     * @return boolean
     * @author wuguidong@cskaoyan.onaliyun.com
     */
    @Override
    public boolean checkStuIdRepeat(String id) {
        // 怎么校验?
        // 直接找studentDao对象做这个事情.
        return studentDao.checkStuIdRepeat(id);
    }

    /**
     * 导入一条学生信息，true表示成功，否则为失败
     * 由于已经判定过很多次了，所以失败只有一种可能，即数组满了
     * @since 14:21
     * @param stu GUI界面输入的学生对象
     * @return boolean
     * @author wuguidong@cskaoyan.onaliyun.com
     */
    @Override
    public boolean addStudent(Student stu) {
        if (stu == null) {
            return false;
        }
        // 通过studentDao对象完成对象的插入
        return studentDao.createStudent(stu);
    }

}
